package br.com.requisicao.compra.service.impl;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.com.requisicao.compra.canonico.RequisicaoCompraProduto;
import br.com.requisicao.compra.canonico.UnidadeMedida;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.dao.IUnidadeMedidaDAO;
import br.com.requisicao.compra.dao.impl.UnidadeMedidaDAO;
import br.com.requisicao.compra.service.IRequisicaoCompraProdutoService;
import br.com.requisicao.compra.service.IUnidadeMedidaService;



public class UnidadeMedidaService implements IUnidadeMedidaService {

	private IUnidadeMedidaDAO unidadeMedidaDAO;
	private IRequisicaoCompraProdutoService requisicaoCompraProdutoService;

	public UnidadeMedida salvar(UnidadeMedida unidadeMedida) {
		this.unidadeMedidaDAO = new UnidadeMedidaDAO();
		try {
			unidadeMedidaDAO.salvar(unidadeMedida);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public UnidadeMedida pesquisarPorId(Long codigo) {
		this.unidadeMedidaDAO = new UnidadeMedidaDAO();
		UnidadeMedida unidadeMedida = null;
		try {
			unidadeMedida = unidadeMedidaDAO.pesquisarPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return unidadeMedida;
	}

	public List<UnidadeMedida> obtemUnidadeMedida() {
		this.unidadeMedidaDAO = new UnidadeMedidaDAO();
		List<UnidadeMedida> listaUnidadeMedida = null;
		try {
			listaUnidadeMedida = unidadeMedidaDAO.obtemUnidadeMedida();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return listaUnidadeMedida;
	}

	public Boolean excluir(UnidadeMedida unidadeMedida) {
		this.unidadeMedidaDAO = new UnidadeMedidaDAO();
		this.requisicaoCompraProdutoService = new RequisicaoCompraProdutoService();
		FacesContext context = FacesContext.getCurrentInstance();
		RequisicaoCompraProduto requisicaoCompraProduto = null;
		Boolean deletou = false;
		try {

			requisicaoCompraProduto = requisicaoCompraProdutoService.obtemPorIdUnidadeMedida(unidadeMedida.getCodigo());

			if (requisicaoCompraProduto != null) {

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.UNIDADE_MEDIDA_RELACIONADO_REQUISICAO_COMPRA);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);

			} else {
				unidadeMedidaDAO.excluir(unidadeMedida);

				deletou = true;

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.UNIDADE_MEDIDA_EXCLUIDA_SUCESSO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return deletou;
	}

	/**
	 * @return the unidadeMedidaDAO
	 */
	public IUnidadeMedidaDAO getUnidadeMedidaDAO() {
		return unidadeMedidaDAO;
	}

	/**
	 * @param unidadeMedidaDAO
	 *            the unidadeMedidaDAO to set
	 */
	public void setUnidadeMedidaDAO(IUnidadeMedidaDAO unidadeMedidaDAO) {
		this.unidadeMedidaDAO = unidadeMedidaDAO;
	}

	/**
	 * @return the requisicaoCompraProdutoService
	 */
	public IRequisicaoCompraProdutoService getRequisicaoCompraProdutoService() {
		return requisicaoCompraProdutoService;
	}

	/**
	 * @param requisicaoCompraProdutoService
	 *            the requisicaoCompraProdutoService to set
	 */
	public void setRequisicaoCompraProdutoService(IRequisicaoCompraProdutoService requisicaoCompraProdutoService) {
		this.requisicaoCompraProdutoService = requisicaoCompraProdutoService;
	}

}